package com.novel.utils;


import java.util.Random;

/**
 * 生成验证码的类
 */
public class CodeUtils {

    //纯数字
    private static String nums = "1,2,3,4,5,6,7,8,9,0";
    //26个小写字母+10个数字，一般用于基本验证，以及不匹配大小写验证
    private static String simple = "1,2,3,4,5,6,7,8,9,0,q,w,e,r,t,y,u,i,o,p,a,s,d,f,g,h,j,k,l,z,x,c,v,b,n,m";
    //添加26个大写字母，难度升级，用于需要匹配大小写的验证
    private static String medium = simple + "Q,W,E,R,T,Y,U,I,O,P,A,S,D,F,G,H,J,K,L,Z,X,C,V,B,N,M";
    //添加各种符号，加上之前的所有东西内容以及符号，难度升级
    private static String hard = medium + "[,],{,},<,>,/,?,;,:,.,`,!,@,#,$,%,^,&,*,(,),_,-,+,=,~";
    //默认的验证码的长度
    private static int length = 6;
    //随机对象
    private static Random random = new Random();


    /* 使用设定好的内容，或者进行少量的自定义 */
    public static String getNumsCode() {
        //分割获得所有元素
        String[] list = simple.split(",");
        //返回数据
        return getCode(list, length);
    }

    public static String getNumsCode(int length) {
        //分割获得所有元素
        String[] list = simple.split(",");
        //返回数据
        return getCode(list, length);
    }

    public static String getSimpleCode() {
        //分割获得所有元素
        String[] list = simple.split(",");
        //返回数据
        return getCode(list, length);
    }

    public static String getSimpleCode(int length) {
        //分割获得所有元素
        String[] list = simple.split(",");
        //返回数据
        return getCode(list, length);
    }

    public static String getMediumCode() {
        //分割获得所有元素
        String[] list = hard.split(",");
        //返回数据
        return getCode(list, length);
    }

    public static String getMediumCode(int length) {
        //分割获得所有元素
        String[] list = simple.split(",");
        //返回数据
        return getCode(list, length);
    }

    public static String getHardCode() {
        //分割获得所有元素
        String[] list = simple.split(",");
        //返回数据
        return getCode(list, length);
    }

    public static String getHardCode(int length) {
        //分割获得所有元素
        String[] list = simple.split(",");
        //返回数据
        return getCode(list, length);
    }

    /**
     * 获取验证码
     *
     * @param list   验证码组成的集合
     * @param length 生成验证码的长度
     */
    public static String getCode(String[] list, int length) {
        //创建StingBuilder对象封装数据
        StringBuilder builder = new StringBuilder();
        //遍历封装数据
        for (int i = 0; i < length; i++) {
            builder.append(list[random.nextInt(list.length)]);
        }
        //返回数据
        return builder.toString();
    }

    /**
     * 获取验证码
     *
     * @param arrays 验证码组成的字符串
     * @param length 生成验证码的长度
     * @param split  分割字符串的方式
     */
    public static String getStringCode(String arrays, int length, String split) {
        //分割获得所有元素
        String[] list = arrays.split(split);
        //返回数据
        return getCode(list, length);
    }

    public static String getStringCode(String arrays, String split) {
        //分割获得所有元素
        String[] list = arrays.split(split);
        //返回数据
        return getCode(list, length);
    }

    /**
     * 获取验证码
     *
     * @param arrays 验证码组成的字符串
     * @param length 生成验证码的长度
     */
    public static String getStringCode(String arrays, int length) {
        //分割获得所有元素
        String[] list = arrays.split(",");
        //返回数据
        return getCode(list, length);
    }

    public static String getStringCode(String arrays) {
        //分割获得所有元素
        String[] list = arrays.split(",");
        //返回数据
        return getCode(list, length);
    }

}
